hvm ioemu: Add support for IOREQ_TYPE_XCHG in qemu-dm.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Fri, 16 Mar 2007 16:22:29 +0000 (16:22 +0000)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Fri, 16 Mar 2007 16:22:29 +0000 (16:22 +0000)
From: Trolle Selander <trolle.selander@gmail.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
tools/ioemu/target-i386-dm/helper2.c

index 7a5f3412c9dd75c021b4351f8d622130e22ff452..17261e632d77d693a73508dd89c5348fd0e53da3 100644 (file)
@@ -439,6 +439,18 @@ void cpu_ioreq_xor(CPUState *env, ioreq_t *req)
     req->data = tmp1;
 }
 
+void cpu_ioreq_xchg(CPUState *env, ioreq_t *req)
+{
+    unsigned long tmp1;
+
+    if (req->data_is_ptr != 0)
+        hw_error("expected scalar value");
+
+    read_physical(req->addr, req->size, &tmp1);
+    write_physical(req->addr, req->size, &req->data);
+    req->data = tmp1;
+}
+
 void __handle_ioreq(CPUState *env, ioreq_t *req)
 {
     if (!req->data_is_ptr && req->dir == IOREQ_WRITE && req->size != 4)
@@ -463,6 +475,9 @@ void __handle_ioreq(CPUState *env, ioreq_t *req)
     case IOREQ_TYPE_XOR:
         cpu_ioreq_xor(env, req);
         break;
+    case IOREQ_TYPE_XCHG:
+        cpu_ioreq_xchg(env, req);
+        break;
     default:
         hw_error("Invalid ioreq type 0x%x\n", req->type);
     }